2025년 3분기 2급 관리자를 지원 및 2025년 3분기 대문 사진 공모를 받고 있습니다.
the tree/위키 구축(r12 Blame)
r12 | ||
---|---|---|
r7 | 1 | [[분류:the tree]] |
r1 (새 문서) | 2 | [include(틀:상위 문서, 문서=the tree)] |
3 | [목차] | |
4 | ||
r10 | 5 | == 백엔드 초기 설정 == |
r1 (새 문서) | 6 | * .env를 제외하고 위키 엔진 내에서 수정이 가능하기 때문에 엄청 신중히 할 필요는 없긴 하다. |
7 | * 그래도 stringConfig.json를 제외하고 미리 만들 것을 추천한다. | |
r8 | 8 | * {{{#f00 엔진 내에 example 파일이 존재하기 때문에 '''최신 버전의 예시 파일을 참고'''할 것.}}} |
r1 (새 문서) | 9 | * 다음 파일들을 만들 때는 example 파일의 이름을 변경하는 것보다 '''예시 파일을 복사하여 사용할 것을 권장한다.''' |
10 | ||
11 | === .env === | |
12 | * 엔진을 실행하기 위한 파일. 엔진 내부에서 수정할 수 없음. | |
r12 | 13 | {{{PORT=3000 #위키를 열 포트 |
14 | IP_HEADER=cf-connecting-ip #IP를 가져올 헤더. 클플 사용한다면 기본값으로 냅두고 클라우드플레어를 쓰지 않는다면 X-Forwarded-For. | |
r1 (새 문서) | 15 | SESSION_SECRET=secret |
16 | ||
r12 | 17 | MONGODB_HOST=127.0.0.1 #MongoDB 호스트 |
18 | MONGODB_PORT=27017 #MongoDB 포트 | |
19 | MONGODB_USER= #MongoDB 계정 이름 | |
20 | MONGODB_PASSWORD= #MongoDB 비밀번호 | |
21 | MONGODB_DATABASE=TheTree #MongoDB DB 이름 | |
r1 (새 문서) | 22 | |
r12 | 23 | USE_REDIS=false #Redis 활성화 여부. 활성화 한다면 위키를 재부팅이나 업데이트하여도 세션이 유지된다. |
r1 (새 문서) | 24 | REDIS_HOST=127.0.0.1 |
25 | REDIS_PORT=6379 | |
26 | REDIS_PASSWORD= | |
27 | ||
r12 | 28 | S3_ENDPOINT= #r2.dev 기준 (https://abcd1234.r2.cloudflarestorage.com) |
29 | S3_ACCESS_KEY_ID= #API 키 1 | |
30 | S3_SECRET_ACCESS_KEY= #API 키 2 | |
31 | S3_BUCKET_NAME=thetree #버킷 이름 | |
32 | S3_REGION=auto #S3를 사용한다면 리전을 정할 수 있다. 자세한 내용은 아래 참고. | |
33 | S3_PUBLIC_HOST=https://cdn.example.com #위키의 서브 도메인을 연결할 것을 추천 | |
r1 (새 문서) | 34 | |
r12 | 35 | MEILISEARCH_HOST=http://127.0.0.1:7700 #검색 서버 호스트 |
36 | MEILISEARCH_KEY= #검색 서버를 실행하면서 나온 액세스 키 | |
37 | MEILISEARCH_INDEX=TheTreeDocuments #검색 정보를 저장할 이름 (다른 위키를 또 연다면 이름을 다르게 하여야 함.) | |
r1 (새 문서) | 38 | }}} |
39 | ||
r9 | 40 | 만약 Amazon S3를 사용한다면 Region 관련 문제가 발생하는데, 이 경우 'S3_REGION=지역명[* ex) ap-southeast-2]'을 추가하여 해결할 수 있다. |
41 | ||
r6 | 42 | === devConfig.json === |
r1 (새 문서) | 43 | * config 권한으로 열람이나 수정할 수 없음. 실제로 config 페이지가 아닌 developer 페이지에 존재한다. |
44 | {{{#!syntax json | |
45 | { | |
46 | "minify": { | |
47 | "css": true, //스킨 테스트위키라면 false | |
48 | "js": true //스킨 테스트위키라면 false | |
49 | }, | |
50 | ||
51 | "captcha": { | |
52 | "enabled": false, //캡차 켜기 및 끄기 | |
53 | "type": "turnstile", //리캡차를 쓰고 싶다면 recaptcha 입력 | |
r2 | 54 | "site_key": "", //캡차 사이트 키 |
r1 (새 문서) | 55 | "secret_key": "", //캡차 시크릿 키 |
56 | ||
57 | "edit_captcha": { | |
58 | "enabled": true, | |
59 | "hours": 1, | |
60 | "edit_count": 10 //캡차를 활성화할 빈도 | |
61 | } | |
62 | }, | |
63 | ||
64 | "smtp_sender": "TestWiki <test@example.com>", | |
65 | "smtp_settings": { | |
66 | "host": "", //gmail 사용한다면 smtp.gmail.com | |
67 | "port": 587, | |
68 | "secure": false, | |
69 | "auth": { | |
70 | "user": "", //계정 ID | |
71 | "pass": "" //계정 비밀번호 | |
72 | } | |
73 | }, | |
74 | ||
75 | "github_api_token": "", | |
76 | "check_update": true //엔진 업데이트 일정 주기마다 확인 | |
77 | } | |
78 | }}} | |
79 | ||
80 | === publicConfig.json === | |
81 | * 프론트엔트에 전송되며, 브라우저에서도 열람 가능한 json이다. | |
82 | {{{#!syntax json | |
83 | { | |
84 | "site_name": "테스트위키", //위키 이름 | |
85 | "front_page": "FrontPage", //위키 대문 | |
86 | "theme_color": "#f85c64", //위키 대표색상. 테마 색상으로 사용됨 | |
87 | "base_url": "http://localhost:3000", //위키 도메인. the tree는 http 지원하지 않음. | |
88 | ||
89 | "logo_text": "테스트위키", //로고 대신 글자를 넣는다면 이것을 사용. 로고와 같이 사용한다면 겹쳐서 보이기 때문에 사용할 수 없음. | |
90 | "logo_image": "", //로고 이미지 상대 경로. 엔진에서 다른 URL은 허용하지 않음. | |
91 | ||
92 | "skin.liberty.navbar_logo_padding": "0.4rem 0 0 0" //스킨 변수 추가. 다른 변수를 추가한다면 이 방식으로 추가하면 되나, json 형식이여야 함. (주의사항: 마지막 요소가 아니라면 반점(,)으로 구분하고 마지막은 반점을 넣지 않음.) | |
r2 | 93 | } |
r1 (새 문서) | 94 | }}} |
95 | ||
96 | === serverConfig.json === | |
97 | * 프론트엔드로 전송되지 않는 정보. | |
98 | {{{#!syntax json | |
99 | { | |
100 | "sitenotice": "", //위키 공지 추가 | |
101 | "default_skin": "liberty", //기본 스킨 | |
102 | "embed_image": "", | |
103 | ||
r9 | 104 | "namespaces": [], //이름 공간 추가. json 형식으로 할 것. |
r1 (새 문서) | 105 | |
r9 | 106 | "withdraw_last_activity_hours": 24, //탈퇴 마지막 활동 시간 경과 조정 |
r1 (새 문서) | 107 | "withdraw_save_days": 0, //탈퇴 끄기: null, 0: 재가입 방지 기능 끄기, 1~: 재가입 방지용 단방향 암호화 해시 저장 (단위는 일 수. 단, 차단된 사용자의 경우 차단 기간동안 가입 불가. 탈퇴하면 차단 해제 불가.) |
r2 | 108 | |
r1 (새 문서) | 109 | "grant_permissions": [ |
110 | "delete_thread", | |
111 | "admin", | |
112 | "update_thread_status", | |
113 | "nsacl", | |
114 | "hide_thread_comment", | |
115 | "grant", | |
116 | "disable_two_factor_login", | |
117 | "no_force_captcha", | |
118 | "login_history", | |
119 | "update_thread_document", | |
120 | "update_thread_topic", | |
121 | "aclgroup", | |
122 | "hide_document_history_log", | |
123 | "hide_revision", | |
124 | "mark_troll_revision", | |
125 | "batch_revert", | |
126 | "api_access" //grant 순서 변경한다면 수정하면 됨. | |
127 | ], | |
128 | ||
129 | "email_whitelist": [], //이메일 화이트리스트. (켠다면 ["gmail.com", "naver.com"]식으로 하면 됨.) | |
r2 | 130 | "use_email_verification": false, //이메일 인증 켜기, 끄기 (끈다면 이메일을 물어보긴 하나, 인증 단계가 패스됨.) |
131 | ||
r1 (새 문서) | 132 | "external_link_icons": { |
133 | "파일:홈페이지 아이콘.svg": "" //다음 이미지 링크가 첨부한 링크라면 외부 링크 표시하지 않음. | |
r5 | 134 | } |
r9 | 135 | |
136 | "content_security_policy": { | |
137 | "frameSrc": [], | |
138 | "connectSrc": [] //엔진의 CSP 정책 수 | |
139 | } | |
r1 (새 문서) | 140 | } |
141 | }}} | |
142 | ||
143 | === stringConfig.json === | |
r10 | 144 | * 엔진 내에서 수정이 되기 때문에 엔진 내에서 수정할 것을 권장함. |
r9 | 145 | * 굳이 설명할 필요가 없어보이기 때문에 생략. |
r1 (새 문서) | 146 | {{{#!syntax json |
147 | { | |
148 | "copyright_text": "copyright agree wow", | |
149 | "editagree_text": "문서 편집을 <strong>저장</strong>하면 당신은 기여한 내용을 <strong>라이선스</strong>으로 배포하고 기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다. 이 <strong>동의는 철회할 수 없습니다.</strong>", | |
150 | "footer_html": "wow im footer", | |
151 | "terms": "여기에 약관을 입력해주세요.", | |
152 | "file_upload_template": "", | |
153 | "withdraw_pledge": "본인은 탈퇴를 하면 기여했던 모든 내역이 <삭제된 사용자>로 표시됨을 동의하며 시스템에서 데이터가 삭제된 이후 기여자임을 증명할 수 없게 된다는 사실을 인지하고 있습니다.", | |
154 | "not_found_html": "", | |
155 | "head_html": "" | |
156 | } | |
157 | }}} | |
158 | ||
r11 | 159 | == 프론트엔드 빌드 == |
r10 | 160 | * the tree가 2.0.0으로 업데이트 되면서 프론트엔드가 vue로 전환되었기 때문에 스킨을 따로 빌드해야하는 작업이 필요하다. |
161 | * 초기 설정 때 당연히 거쳐야 하는 작업이며, 프론트엔드에 큰 업데이트가 있을 때 수동으로 빌드해야 하니 참고할 것. | |
162 | ||
r11 | 163 | == 모나코 플러그인 설치 == |
164 | ||
r1 (새 문서) | 165 | == 실행 및 가입 == |
166 | 위키 엔진 실행 | |
167 | > pm2 start main.js | |
168 | ||
169 | 가입하는 방법은 따로 서술하지 않음. | |
170 | ||
171 | == /admin/config == | |
172 | * 위키 설정할 수 있는 페이지. 제목은 Config라고 표시된다. | |
173 | * publicConfig.json, serverConfig.json, stringConfig.json 파일 수정 | |
174 | * json 형식이 아니면 경고가 표시되기 때문에 안심해도 된다. | |
175 | * html 같이 "를 사용하는 경우 자동으로 {{{\n}}}가 추가되기 때문에 엔진 내부에서 수정하는 것이 더 편리하다. | |
176 | * 기능 비활성화 | |
r3 | 177 | * openNAMU 기여 이동 |
r1 (새 문서) | 178 | * openNAMU DB를 마이그레이션 했다면 O:Gwangtori로 표시되어 있는 것을 가입한 사용자로 기여 목록을 이전할 수 있다. |
179 | ||
180 | == /admin/developer == | |
181 | * 개발자 설정. | |
182 | * 업데이트 | |
183 | * 위키 엔진을 업데이트할 수 있다. | |
184 | * 현재 버전, 새 버전, 업데이트 확인 시각을 볼 수 있다. | |
185 | * 추가로 서브모듈 업데이트를 할 수 있고, 스킨 업데이트도 할 수 있다. | |
186 | * 해당 업데이트 기능은 모두 git 기능을 사용하기 때문에 git clone 형식으로 받아야 업데이트할 수 있다. | |
187 | * 도구 | |
188 | * JS 다시 minify, CSS 다시 minify | |
189 | * 엔진 내부의 css, js를 다시 불러오는 기능. | |
190 | * openNAMU 데이터 마이그레이션 | |
191 | * openNAMU의 문서와 역사를 모두 옮겨주며 파일도 모두 업로드해주기 때문에 openNAMU에서 옮기는 소유자라면 사용을 강력 추천한다.[* 단, 사용자 계정은 비밀번호 해시 이슈로 옮겨지지 않으며 따라서 사용자 문서도 옮겨주지 않는다.] | |
192 | * 위키 엔진 폴더에 'opennamu_data' 폴더를 만들고 SQLite 형식의 data.db와 'data' 폴더 안에 오픈나무의 사진이 있는 'images' 폴더를 놓으면 세팅이 끝난다. | |
193 | * 마이그레이션 작업하기 전 이름 공간 ACL[* 문서, 틀, 파일, 분류, 사용자]을 미리 세팅하고 진행할 것. | |
194 | * 엔진이 접근할 수 있는 권한인지 확인하고 해당 버튼을 누르면 된다. 누를 때마다 마이그레이션되기 때문에 주의할 것! | |
195 | * 마이그레이션 작업이 모두 끝나면 logs 파일이 생성된다. 생성되지 않았을 경우 중간에 에러가 발생하여 꺼진 것이다. | |
196 | * 성공적으로 끝났다면, 빨간 링크로 문서가 없는 것처럼 보이는데, '역링크/검색 문서 재생성'을 눌러 작업하여 해결한다.[* 마이그레이션 작업하면서 같이하면 서버에 무리가기 때문에 고의로 같이 진행하지 않는 것이다.] | |
197 | * publicMin 안 디렉토리 비우기 | |
198 | * cache 안 디렉토리 비우기 | |
199 | * 스킨 업데이트를 하였다면 캐시를 비워 스킨 css와 js를 다시 불러온다. | |
200 | * blame 없는 기록 blame 생성 | |
201 | * 역링크/검색 문서 재생성 | |
202 | * openNAMU 데이터 마이그레이션이나 일부 문서의 역링크나 검색 정보가 누락되었을 경우 실행. | |
203 | * 역링크만 재생성 | |
204 | * 검색 문서만 재생성 | |
205 | * MeiliSearch 인덱스 재생성 | |
206 | * MeiliSearch 인덱스의 이름을 변경하였거나 서버를 이전했다면 재생성한다. | |
207 | * Eval | |
208 | * 엔진을 업데이트하면서 DB 개정이나 엔진에 큰 수정을 해야할 때 사용하는 기능이다. | |
209 | * 설정 | |
210 | * devConfig.json | |
211 | * 스킨의 css, js 캐시 여부 | |
212 | * 캡차 설정 | |
213 | * 메일 smtp 설정 | |
214 | * 정적 파일 | |
215 | * 정적 파일을 업로드하는 곳으로 스킨에 표시할 로고나 파비콘을 업로드하면 된다. | |
216 | * /favicon.ico: 업로드하면 자동으로 적용된다. | |
217 | * /logo.svg: publicConfig.json에 지정한 경로로 업로드하면 된다. | |
218 | ||
r4 | 219 | == 마무리 == |
r1 (새 문서) | 220 | 모두 끝났으니 운영 문서의 ACL을 정리하고 즐거운 위키 생활하기 바란다. |